Task Control BlockΒΆ

//
///*******************************************************************************************************
//                                          TASK CONTROL BLOCK
///*******************************************************************************************************
///

typedef struct os_tcb
{
    OS_STK *OSTCBStkPtr;                    // Pointer to current top of stack

#if OS_TASK_CREATE_EXT_EN > 0
    void *OSTCBExtPtr;                      // Pointer to user definable data for TCB extension
    OS_STK *OSTCBStkBottom;                 // Pointer to bottom of stack
    INT32U OSTCBStkSize;                    // Size of task stack (in number of stack elements)
    INT16U OSTCBOpt;                        // Task options as passed by OSTaskCreateExt()
    INT16U OSTCBId;                         // Task ID (0..65535)
#endif

    //
    // Links connecting TCB's into a TCB list
    //
    struct os_tcb *OSTCBNext;               // Pointer to next     TCB in the TCB list
    struct os_tcb *OSTCBPrev;               // Pointer to previous TCB in the TCB list

#if OS_EVENT_EN     || (OS_FLAG_EN > 0)
    OS_EVENT *OSTCBEventPtr;                // Pointer to event control block
#endif

#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
    void *OSTCBMsg;                         // Message received from OSMboxPost() or OSQPost()
#endif

#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
#if OS_TASK_DEL_EN > 0
    OS_FLAG_NODE *OSTCBFlagNode;            // Pointer to event flag node
#endif
    OS_FLAGS OSTCBFlagsRdy;                 // Event flags that made task ready to run
#endif

    INT16U OSTCBDly;                        // Nbr ticks to delay task or, timeout waiting for event
    INT8U OSTCBStat;                        // Task      status
    INT8U OSTCBStatPend;                    // Task PEND status
    INT8U OSTCBPrio;                        // Task priority (0 == highest)

    INT8U OSTCBX;                           // Bit position in group  corresponding to task priority
    INT8U OSTCBY;                           // Index into ready table corresponding to task priority
#if OS_LOWEST_PRIO <= 63
    INT8U OSTCBBitX;                        // Bit mask to access bit position in ready table
    INT8U OSTCBBitY;                        // Bit mask to access bit position in ready group
#else
    INT16U OSTCBBitX;                       // Bit mask to access bit position in ready table
    INT16U OSTCBBitY;                       // Bit mask to access bit position in ready group
#endif

#if OS_TASK_DEL_EN > 0
    INT8U OSTCBDelReq;                      // Indicates whether a task needs to delete itself
#endif

#if OS_TASK_PROFILE_EN > 0
    INT32U OSTCBCtxSwCtr;                   // Number of time the task was switched in
    INT32U OSTCBCyclesTot;                  // Total number of clock cycles the task has been running
    INT32U OSTCBCyclesStart;                // Snapshot of cycle counter at start of task resumption
    OS_STK *OSTCBStkBase;                   // Pointer to the beginning of the task stack
    INT32U OSTCBStkUsed;                    // Number of bytes used from the stack
#endif

#if OS_TASK_NAME_SIZE > 1
    INT8U OSTCBTaskName[OS_TASK_NAME_SIZE];
#endif
} OS_TCB;

Previous topic

uCOS Task Functions

Next topic

ucos_ii.h

This Page